﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sistema.Dominio;

namespace Sistema.NFe.Xml.Versao200
{
    public class XmlCancelamentoNFe200 : Sistema.NFe.Xml.Interfaces.IXmlCancelamentoNFe
    {
        String _versao;
        String _chaveNFe;
        TipoAmbiente _tipoAmbiente;
        String _id;
        long _protocolo;
        String _justificativaCancelamento;

        #region Propriedades
        public String Xml
        {
            get
            {
                return this.GerarXml();
            }
        }
        public String JustificativaCancelamento
        {
            get { return _justificativaCancelamento; }
            set { _justificativaCancelamento = value; }
        }

        public long Protocolo
        {
            get { return _protocolo; }
            set { _protocolo = value; }
        }

        public String Id
        {
            get { return _id; }
            set { _id = value; }
        }

        public TipoAmbiente TipoAmbiente
        {
            get { return _tipoAmbiente; }
            set { _tipoAmbiente = value; }
        }

        public String ChaveNFe
        {
            get { return _chaveNFe; }
            set { _chaveNFe = value; }
        }

        public String Versao
        {
            get { return _versao; }
            set { _versao = value; }
        }

        #endregion

        private string GerarXml()
        {
            Mapeamento.TCancNFe dadosCanc = new Mapeamento.TCancNFe();
            dadosCanc.versao = this.Versao;
            dadosCanc.infCanc = new Mapeamento.TCancNFeInfCanc();
            dadosCanc.infCanc.chNFe = this.ChaveNFe.Numeros();
            dadosCanc.infCanc.tpAmb = (Mapeamento.TAmb)((int)this.TipoAmbiente - 1);
            dadosCanc.infCanc.Id = this.ChaveNFe.Numeros().Insert(0,"ID");
            dadosCanc.infCanc.xServ = Mapeamento.TCancNFeInfCancXServ.CANCELAR;
            dadosCanc.infCanc.nProt = this.Protocolo.ToString();
            dadosCanc.infCanc.xJust = this.JustificativaCancelamento;

            System.Xml.Serialization.XmlSerializerNamespaces namespaces = new System.Xml.Serialization.XmlSerializerNamespaces();
            namespaces.Add("", "http://www.portalfiscal.inf.br/nfe");
            string xml = new Util.Serializacao().Serializar<Mapeamento.TCancNFe>(dadosCanc, namespaces);
            return xml;
        } 
    }
}
